设每个叉树的结点有个指针指向子树,有个结点的叉树有多少空链域?
下面说法中哪个是错误的:
对二叉搜索树进行什么遍历可以得到从小到大的排序序列?
若二叉搜索树是有个结点的完全二叉树,则不正确的说法是:
已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉搜索树后,最后两层上的结点总数为:
AVL树是一种平衡的二叉搜索树,树中任一结点具有下列哪一特性:
下列二叉搜索树中,满足平衡二叉树定义的是:
12个结点的AVL树的最大深度是?
将下列数(88, 70, 61, 96, 120, 90)按顺序插入初始为空的AVL中,所形成的AVL树的前序遍历结果是:
若AVL树的深度是6(空树的深度定义为-1),则该树的最少结点数是:
堆的形状是一棵:
创建一个初始堆,含有个记录,其时间复杂度是:
将6、4、3、5、8、9顺序插入初始为空的最大堆(大根堆)中,那么插入完成后堆顶的元素为:
将10、12、1、14、6、5、8、15、3、9、7逐个按顺序插入到初始为空的最小堆(小根堆)中,然后连续执行两次删除最小元素操作(DeleteMin),此后堆顶的元素是什么?
对于一个有个结点、条边的森林,共有几棵树?
设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?
由分别带权为9、2、5、7的四个叶子结点构成一棵哈夫曼树,该树的带权路径长度为:
对最小堆(小顶堆){1,3,2,6,7,5,4,15,14,12,9,10,11,13,8} 进行三次删除最小元的操作后,结果序列为:
将{28, 15, 42, 18, 22, 5, 40}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:
设最小堆(小根堆)的层序遍历结果为{1, 3, 2, 5, 4, 7, 6}。用线性时间复杂度的算法将该堆调整为最大堆(大根堆),则该树的中序遍历结果为:
在有()个元素的最大堆(大根堆)中,最小元的数组下标可以是:
二叉树的中序遍历也可以循环地完成。给定循环中堆栈的操作序列如下(其中push为入栈,pop为出栈):
push(1), push(2), push(3), pop(), push(4), pop(), pop(), push(5), pop(), pop(), push(6), pop()
以下哪句是对的?
在一个有2333个元素的最小堆中,下列哪个下标不可能是最大元的位置?
在下述结论中,正确的是:
① 只有2个结点的树的度为1;
② 二叉树的度为2;
③ 二叉树的左右子树可任意交换;
④ 在最大堆(大顶堆)中,从根到任意其它结点的路径上的键值一定是按非递增有序排列的。
将键值1到15顺序插入一个初始为空的斜堆。则下列句子中哪句是错的?
如果AVL树的深度为5(空树的深度定义为0),则此树最少有多少个结点?
将一系列数字顺序一个个插入一棵初始为空的AVL树。下面哪个系列的第一次旋转是“右-左”双旋?
将 1, 2, 3, 6, 5, 4 顺序一个个插入一棵初始为空的AVL树,会经历下列哪些旋转?
若一棵AVL树有 28 个结点,则该树的最大深度为__。空树的深度定义为0。
已知字符集{ a, b, c, d, e, f },若各字符出现的次数分别为{ 6, 3, 8, 2, 10, 4 },则对应字符集中各字符的哈夫曼编码可能是:
已知二叉排序树如下图所示,元素之间应满足的大小关系是:
在将数据序列( 6, 1, 5, 9, 8, 4, 7 )建成大根堆时,正确的序列变化过程是:
若将一棵树 转化为对应的二叉树 ,则下列对 的遍历中,其遍历序列与 的后根遍历序列相同的是:
对于任意一棵高度为 5 且有 10 个结点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元的数量至少是:
下列给定的关键字输入序列中,不能生成如下二叉排序树的是:
在下列所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是:
设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为,和。则与森林F对应的二叉树根结点的右子树上的结点个数是:
将{ 5, 11, 13, 1, 3, 6 }依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:
若二叉搜索树是有个结点的完全二叉树,则不正确的说法是:
若一棵二叉树的后序遍历序列是{ 1, 3, 2, 6, 5, 7, 4 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?
已知不相交集合用数组表示为{ 4, 6, 5, 2, -3, -4, 3 }。若集合元素从1到7编号,则调用Union(Find(7),Find(1))(按规模求并,并且带路径压缩)后的结果数组为:
如果AVL树的深度为6(空树的深度定义为),则此树最少有多少个结点?
将 9, 8, 7, 2, 3, 5, 6, 4 顺序插入一棵初始为空的AVL树。下列句子中哪句是错的?
已知一棵二叉树的树形如下图所示,其后序序列为{ e, a, c, b, d, g, f }。树中与结点a同层的结点是:
对以下算法功能最准确的描述是()。
int fun1(BTreeNode *BT, ElemType e){
int n1, n2;
if (BT==NULL) return 0;
if (BT->data==e) return 1;
n1 = fun1(BT->left, e);
if (n1>=1) return n1+1;
n2 = fun1(BT->right, e);
if (n2>=1) return n2+1;
return 0;
}
设一棵非空完全二叉树 的所有叶节点均位于同一层,且每个非叶结点都有 2 个子结点。若 有 个叶结点,则 的结点总数是:
对 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 的值是:
设 T 是非空二叉树,若 T 的先序遍历和后序遍历序列相同,则 T 的形态是 __
设 T 是非空二叉树,若 T 的后序遍历和中序遍历序列相同,则 T 的形态是 __
以二叉链表作为二叉树的存储结构,在具有 个结点的二叉链表中(),空链域的个数为 __
一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点个数是( )。
若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是:
对于先序遍历与中序遍历结果相同的二叉树为( )
若结点 p 与 q 在二叉树 T 的中序遍历序列中相邻, 且 p 在 q 之前,则下列 p 与 q 的关系中,不可能的是
I. q 是 p 的双亲
II. q 是 p 的右孩子
III. q 是 p 的右兄弟
IV. q 是 p 的双亲的双亲
对任意给定的含 () 个字符的有限集 ,用二叉树表示 的哈夫曼编码集和定长编码集,分别得到二叉树 和 。 下列叙述中,正确的是:
在下图所示的 5 阶 B 树 T 中,删除关键字 260 之后需要进行必要的调整,得到新的 B 树 T1。下列选项中,不可能是 T1 根结点中关键字序列的是

下列代码的功能是将二叉树T中的结点按照层序遍历的顺序输出。
typedef struct TreeNode *Tree;
struct TreeNode
{
int Key;
Tree Left;
Tree Right;
};
void Level_order ( Tree T )
{
Queue Q;
if ( !T ) return;
Q = CreateQueue( MaxElements );
Enqueue( T, Q );
while ( !IsEmpty( Q ) ){
T = Front_Dequeue ( Q ); /* return the front element and delete it from Q */
printf("%d ", T->Key);
if ( T->Left )
2分;
if ( 2分 )
2分;
}
}
下列代码的功能是从一个大顶堆H的某个指定位置p开始执行下滤。
void PercolateDown( int p, PriorityQueue H )
{
int child;
ElementType Tmp = H->Elements[p];
for ( ; p * 2 <= H->Size; p = child ) {
child = p * 2;
if ( child!=H->Size && 2分 )
child++;
if ( H->Elements[child] > Tmp )
2分;
else break;
}
H->Elements[p] = Tmp;
}
下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。
typedef struct TreeNode *BinTree;
struct TreeNode
{
int Key;
BinTree Left;
BinTree Right;
};
int Width( BinTree T )
{
BinTree p;
Queue Q;
int Last, temp_width, max_width;
temp_width = max_width = 0;
Q = CreateQueue(MaxElements);
Last = Queue_rear(Q);
if ( T == NULL) return 0;
else {
Enqueue(T, Q);
while (!IsEmpty(Q)) {
p = Front_Dequeue(Q);
2分;
if ( p->Left != NULL ) Enqueue(p->Left, Q);
2分;
if ( Queue_front(Q) > Last ) {
Last = Queue_rear(Q);
if ( temp_width > max_width ) max_width = temp_width;
2分;
} /* end-if */
} /* end-while */
return max_width;
} /* end-else */
}
下列代码的功能是将大顶堆H中指定位置P上的元素的整数键值上调D个单位,然后继续将H调整为大顶堆。
void IncreaseKey( int P, int D, PriorityQueue H )
{
int i, key;
key = H->Elements[P] + D;
for ( i = 2分; H->Elements[i/2] < key; i/=2 )
2分;
H->Elements[i] = key;
}
IsRBTree (3)
The functions IsRBTree is to check if a given binary search tree T is a red-black tree. Return true if T is, or false if not.
The red-black tree structure is defined as the following:
typedef enum { red, black } colors;
typedef struct RBNode *PtrToRBNode;
struct RBNode{
int Data;
PtrToRBNode Left, Right, Parent;
int BH; /* black height */
colors Color;
};
typedef PtrToRBNode RBTree;
Please fill in the blanks.
bool IsRBTree( RBTree T )
{
int LeftBH, RightBH;
if ( !T ) return true;
if ( T->Color == black ) T->BH = 1;
else {
if ( T->Left && (T->Left->Color == red)) return false;
if ( T->Right && 2分 ) return false;
}
if ( !T->Left && !T->Right ) return true;
if ( 2分) {
if ( T->Left ) LeftBH = T->Left->BH;
else LeftBH = 0;
if ( T->Right ) RightBH = T->Right->BH;
else RightBH = 0;
if ( LeftBH == RightBH ) {
2分;
return true;
}
else return false;
}
else return false;
}